char **split(char *str,char *spl){
	char **strArr=(char **)malloc(sizeof(char *));
	int len=0;
	int i=0;
	char *tok=strtok(str,spl);
	while(tok!=NULL){
		strArr=(char **)realloc(strArr,(++len)*sizeof(char *));
		strArr[i]=(char *)malloc(50*sizeof(char));
		strcpy(strArr[i],tok);
		i++;
		tok=strtok(NULL,spl);
	}
	return strArr;
}


enum ColType{
	INT=-1,
	FLOAT=-2,
	DOUBLE=-3,
	CHAR=-4,
};
//根据sql查表/返回通用结构体数组/指针/多记录/单记录
//objsize为结构体字节长度
//coltypes为结构体各属性类型/字符串型直接传长度
void *getObjs(sqlite3 *db,char *sql,int objsize,int *coltypes){
	char **res;
	int rows,cols;
	sqlite3_get_table(db,sql,&res,&rows,&cols,NULL);
	if(rows<1){
		return NULL;
	}
	void *arr=malloc(rows*objsize);
	void *p=arr;
	int index=cols;
	for(int i=0;i<rows;i++){
		void *obj=malloc(objsize);
		void *p2=obj;
		for(int j=0;j<cols;j++){
			if(coltypes[j]==INT){
				int n=atoi(res[index++]);
				memcpy(p2,&n,4);//赋值长度4/赋值后偏移4
				p2+=4;
			}else if(coltypes[j]==FLOAT){
				float n=atof(res[index++]);
				memcpy(p2,&n,4);//赋值长度4/赋值后偏移4
				p2+=4;
			}else if(coltypes[j]==DOUBLE){
				double n=atof(res[index++]);
				memcpy(p2,&n,8);//赋值长度8/赋值后偏移8
				p2+=8;
			}else if(coltypes[j]>=0){
				//当传入的coltype是正数
				//按字符串处理/正数值为字符串长度
				memcpy(p2,res[index++],coltypes[j]);
				p2+=coltypes[j];
			}
		}
		//结构体最后一个属性为rows记录数/手动赋值
		memcpy(p2,&rows,4);
		memcpy(p,obj,objsize);
		free(obj);
		obj=NULL;
		p+=objsize;
	}
	sqlite3_free_table(res);
	return arr;
}
